<template><div><h2 id="day03" tabindex="-1"><a class="header-anchor" href="#day03" aria-hidden="true">#</a> day03</h2>
<h3 id="任务" tabindex="-1"><a class="header-anchor" href="#任务" aria-hidden="true">#</a> 任务</h3>
<ul>
<li>[x] 模板模式处理抽奖流程</li>
</ul>
<h3 id="学习过程" tabindex="-1"><a class="header-anchor" href="#学习过程" aria-hidden="true">#</a> 学习过程</h3>
<ol>
<li>
<p>因为之前没学过设计模式，先学一学模板模式，用到一种学一种，哈哈哈</p>
</li>
<li>
<p>先看一下整个抽奖流程</p>
<figure><img src="" alt="抽奖过程" tabindex="0" loading="lazy"><figcaption>抽奖过程</figcaption></figure>
</li>
<li>
<p>了解了抽奖流程之后就开始写代码</p>
<ol>
<li>
<p>先写对应的 dao 层</p>
<ol>
<li>要查策略吧？写个策略的 Mapper</li>
<li>要查策略详情吧？写个策略详情的 Mapper</li>
<li>要查奖品吧？要减奖品库存吧？要查没库存的奖品吧？写个奖品的 Mapper</li>
</ol>
</li>
<li>
<p>然后实现 repository 层</p>
<p>这里主要是调 Mapper 将结果进行聚合封装</p>
</li>
<li>
<p>使用模板模式设计抽奖过程代码</p>
<ol>
<li>顶层接口规定抽奖的入参出参</li>
<li>加一层 Config 把抽奖策略进行统一录入</li>
<li>配置完成后需要调用基础服务比如 repository 层，所以加一层基础支持</li>
<li>然后来一个抽象类，在这里实现接口的抽奖，抽奖接口里面写抽奖的流程，然后具体的方法交给子类实现</li>
<li>实现抽象类</li>
</ol>
</li>
<li>
<p>测试</p>
</li>
</ol>
</li>
</ol>
<h3 id="遇到的问题" tabindex="-1"><a class="header-anchor" href="#遇到的问题" aria-hidden="true">#</a> 遇到的问题</h3>
<p>相对于前两天，今天的内容算容易的，因为只有一个模板设计模式没学过，只要理清了思路、理清代码执行流程，今天应该算容易的</p>
<ol>
<li>
<p>空指针 bug</p>
<p>今天太晚了，先注销那个判断吧，待会儿搞完又不想睡觉了，后面也会解决这个 bug 吧，先睡觉咯 <code v-pre>:TODO</code></p>
</li>
</ol>
<h3 id="总结" tabindex="-1"><a class="header-anchor" href="#总结" aria-hidden="true">#</a> 总结</h3>
<p>今天主要就两件事，先学习模板设计模式，然后使用模板设计模式来组织抽奖流程，主要就是通过一系列的封装，把公用的代码提取出来，比如配置、执行流程、以及公用仓储服务，然后把接口留给实现类而达到同一套代码，不同的处理方法</p>
<p>收获：</p>
<ol>
<li>今天对于前两天来说，对于包的组织架构以及 DDD 有了更深的理解，很明显的感觉到知道代码该写在哪了，找包都比前两天快</li>
<li>学习了模板模式，知道了模板模式的代码应该怎样组织，突然感觉那种设计模式大牛真的能把封装继承多态玩出花，有了设计模式，代码的扩展性提高了很多</li>
</ol>
</div></template>


